package com.lzp.appexp.applicaton

import android.app.Application
import android.os.Handler
import android.os.Looper
import com.chad.library.adapter.base.module.LoadMoreModuleConfig
import com.imageloader.ImageLoader
import com.imageloader.ImageLoaderConfig
import com.imageloader.ImageLoaderUtils
import com.net.NetClientConfig
import com.net.NetUtils
import com.utils.BuildConfig
import com.utils.Utils
import com.view.loadmore.LoadMoreView

/**
 * @describe
 * @author: lixiaopeng
 * @Date: 2019-06-12
 */
class App : Application() {
    companion object {
        var application: Application? = null
    }

    override fun onCreate() {
        super.onCreate()
        application = this
        //第一时间初始化，且必须在主线程的
        firstMainInit()
        //需要在主线程，但是不需要第一时间初始化
        mainDelayInit()
        //可以子线程初始化的
        asyncInit()
        //可以子线程初始化的，且可以延迟初始化的
        asyncDelayInit()
    }

    private fun firstMainInit() {
        //涉及到context使用，第一时间初始化
        Utils.init(this, BuildConfig.DEBUG)
        //splash用到网络和图片加载库，因此放在主线程，第一时间初始化
        NetUtils.init(NetClientConfig.Builder()
                              .setConnectTimeout(5000L)
                              .setReadTimeOut(5000L)
                              .setWriteTimeout(5000L)
                              .debug(BuildConfig.DEBUG)
                              .setCookieJar(null)
                              .setTag("netTag")
                              .addInterceptor(null)
                              .addNetInterceptor(null)
                              .build())

        ImageLoader.get(this).init(ImageLoaderConfig.ImageLoaderConfigBuilder()
                                           .setCacheRule(null)
                                           .setDiskCachePath(ImageLoaderUtils.getDefaultDiskCachePath(this))
                                           .setMaxDiskCacheSize(100 * 1024 * 1024.toLong())
                                           .setMaxMemoryCacheSize(50 * 1024 * 1024.toLong())
                                           .setRequestClient(NetUtils.getHttpClient())
                                           .build())
    }

    /**
     * 主线程
     */
    private fun mainDelayInit() {
        Looper.myQueue().addIdleHandler {
            //统一配置加载更多
            LoadMoreModuleConfig.defLoadMoreView = LoadMoreView()
            //初始化工具类
            true
        }
    }

    /**
     * 异步初始化
     */
    private fun asyncInit() {
       //暂时没有 考虑HandlerThread
    }

    /**
     * 异步延迟初始化
     */
    private fun asyncDelayInit() {
       //暂时没有
    }

    override fun onTerminate() {
        Utils.onTerminate()
        super.onTerminate()
    }

    override fun onLowMemory() {
        Utils.onLowMemory()
        super.onLowMemory()
    }

    override fun onTrimMemory(level: Int) {
        Utils.onTrimMemory(level)
        super.onTrimMemory(level)
    }
}